package com.example.demo.config;

import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.session.SaSessionCustomUtil;
import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: Pinp
 * @Date: 2021/8/11 17:53
 */
@Component
public class StpInterfaceImpl implements StpInterface {

//    @Resource
//    UserInfoRepository uiRepo;

    /**
     * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验)
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        // 本list仅做模拟，实际项目中要根据具体业务逻辑来查询角色
        List<String> list = new ArrayList<String>();
        list.add("101");
//        List<String> list = new ArrayList<String>();
//        List<Map<String, Object>> listRoles = uiRepo.getRoles((Integer) StpUtil.getLoginId());
//        listRoles.forEach(o -> o.forEach((key, value) -> {
//            if (key.equals("name")){
//                list.add(String.valueOf(value));
//            }
//        }));
        return list;
    }

    /**
     * 返回一个账号所拥有的权限码集合
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {

        // 1. 获取这个账号所属角色id
        //long roleId = StpUtil.getSessionByLoginId(loginId).get("Role_Id", () -> {
        //    return "";     // 从数据库查询这个账号所属的角色id
        //});
        int roleId = StpUtil.getSession().getInt("roleId");

        // 2. 获取这个角色id拥有的权限列表
        SaSession roleSession = SaSessionCustomUtil.getSessionById("role-" + roleId);
        List<String> list = roleSession.get("Permission_List", () -> {
            return "";  // 从数据库查询这个角色id拥有的权限列表
        });

        // 3. 返回
        return list;
    }

}
